package com.nlecloud.bc.contract;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.DynamicArray;
import org.fisco.bcos.sdk.abi.datatypes.Event;
import org.fisco.bcos.sdk.abi.datatypes.Function;
import org.fisco.bcos.sdk.abi.datatypes.Type;
import org.fisco.bcos.sdk.abi.datatypes.Utf8String;
import org.fisco.bcos.sdk.abi.datatypes.generated.Int256;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple5;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple6;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.eventsub.EventCallback;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class Infringement extends Contract {
    public static final String[] BINARY_ARRAY = {"60806040523480156200001157600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611001600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356004b6a6040805190810160405280600f81526020017f745f696e6672696e67656d656e743100000000000000000000000000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016200014391906200028c565b602060405180830381600087803b1580156200015e57600080fd5b505af115801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001999190810190620001b6565b5062000336565b6000620001ae8251620002e5565b905092915050565b600060208284031215620001c957600080fd5b6000620001d984828501620001a0565b91505092915050565b6000620001ef82620002da565b80845262000205816020860160208601620002ef565b620002108162000325565b602085010191505092915050565b6000601b82527f757569642c7469746c652c686173682c6f776e657269642c75726c00000000006020830152604082019050919050565b6000600782527f74625f6e616d65000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006060820190508181036000830152620002a88184620001e2565b90508181036020830152620002bd8162000255565b90508181036040830152620002d2816200021e565b905092915050565b600081519050919050565b6000819050919050565b60005b838110156200030f578082015181840152602081019050620002f2565b838111156200031f576000848401525b50505050565b6000601f19601f8301169050919050565b61214180620003466000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063fc10daed14610051578063fcb15dc214610093575b600080fd5b34801561005d57600080fd5b506100786004803603610073919081019061185a565b6100d0565b60405161008a96959493929190611c53565b60405180910390f35b34801561009f57600080fd5b506100ba60048036036100b591908101906118c1565b610f6e565b6040516100c79190611c38565b60405180910390f35b600060608060608060606000806000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280600f81526020017f745f696e6672696e67656d656e743100000000000000000000000000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161018e9190611d00565b602060405180830381600087803b1580156101a857600080fd5b505af11580156101bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101e091908101906117c7565b94508473ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561024657600080fd5b505af115801561025a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061027e919081019061174c565b935060008e511115610312578373ffffffffffffffffffffffffffffffffffffffff1663cd30a1d18f6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016102df9190611e6c565b600060405180830381600087803b1580156102f957600080fd5b505af115801561030d573d6000803e3d6000fd5b505050505b8473ffffffffffffffffffffffffffffffffffffffff1663e8434e396040805190810160405280600f81526020017f745f696e6672696e67656d656e74310000000000000000000000000000000000815250866040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161039e929190611d22565b602060405180830381600087803b1580156103b857600080fd5b505af11580156103cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506103f09190810190611775565b92508273ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561045657600080fd5b505af115801561046a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061048e91908101906117f0565b9a508373ffffffffffffffffffffffffffffffffffffffff16637ec1cc6560018f038e6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016104ea929190611cd7565b600060405180830381600087803b15801561050457600080fd5b505af1158015610518573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff1663e8434e396040805190810160405280600f81526020017f745f696e6672696e67656d656e74310000000000000000000000000000000000815250866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016105a8929190611d22565b602060405180830381600087803b1580156105c257600080fd5b505af11580156105d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105fa9190810190611775565b92508273ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561066057600080fd5b505af1158015610674573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061069891908101906117f0565b6040519080825280602002602001820160405280156106cb57816020015b60608152602001906001900390816106b65790505b5099508273ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561073257600080fd5b505af1158015610746573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061076a91908101906117f0565b60405190808252806020026020018201604052801561079d57816020015b60608152602001906001900390816107885790505b5098508273ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561080457600080fd5b505af1158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061083c91908101906117f0565b60405190808252806020026020018201604052801561086f57816020015b606081526020019060019003908161085a5790505b5097508273ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156108d657600080fd5b505af11580156108ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061090e91908101906117f0565b60405190808252806020026020018201604052801561094157816020015b606081526020019060019003908161092c5790505b5096508273ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156109a857600080fd5b505af11580156109bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109e091908101906117f0565b604051908082528060200260200182016040528015610a1357816020015b60608152602001906001900390816109fe5790505b509550600091505b8273ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610a7f57600080fd5b505af1158015610a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ab791908101906117f0565b821215610f4b578273ffffffffffffffffffffffffffffffffffffffff1663846719e0836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610b139190611c38565b602060405180830381600087803b158015610b2d57600080fd5b505af1158015610b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b65919081019061179e565b90508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610bba90611df7565b600060405180830381600087803b158015610bd457600080fd5b505af1158015610be8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250610c119190810190611819565b8a83815181101515610c1f57fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610c7f90611f2b565b600060405180830381600087803b158015610c9957600080fd5b505af1158015610cad573d6000803e3d6000fd5b505050506040513d6000823e","3d601f19601f82011682018060405250610cd69190810190611819565b8983815181101515610ce457fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610d4490611da2565b600060405180830381600087803b158015610d5e57600080fd5b505af1158015610d72573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250610d9b9190810190611819565b8883815181101515610da957fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610e0990611e4c565b600060405180830381600087803b158015610e2357600080fd5b505af1158015610e37573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250610e609190810190611819565b8783815181101515610e6e57fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610ece90611ed6565b600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250610f259190810190611819565b8683815181101515610f3357fe5b90602001906020020181905250816001019150610a1b565b8a8a8a8a8a8a9a509a509a509a509a509a50505050505093975093979195509350565b6000806000803373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc90611d82565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040805190810160405280600f81526020017f745f696e6672696e67656d656e743100000000000000000000000000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016110b19190611d00565b602060405180830381600087803b1580156110cb57600080fd5b505af11580156110df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061110391908101906117c7565b92508273ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561116957600080fd5b505af115801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111a1919081019061179e565b91508173ffffffffffffffffffffffffffffffffffffffff1663e942b5166040805190810160405280600f81526020017f745f696e6672696e67656d656e743100000000000000000000000000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161122d9190611ea1565b600060405180830381600087803b15801561124757600080fd5b505af115801561125b573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b5168a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016112b49190611e17565b600060405180830381600087803b1580156112ce57600080fd5b505af11580156112e2573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516896040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161133b9190611f4b565b600060405180830381600087803b15801561135557600080fd5b505af1158015611369573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016113c29190611dc2565b600060405180830381600087803b1580156113dc57600080fd5b505af11580156113f0573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016114499190611e6c565b600060405180830381600087803b15801561146357600080fd5b505af1158015611477573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663e942b516866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016114d09190611ef6565b600060405180830381600087803b1580156114ea57600080fd5b505af11580156114fe573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff166331afac366040805190810160405280600f81526020017f745f696e6672696e67656d656e74310000000000000000000000000000000000815250846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161158e929190611d52565b602060405180830381600087803b1580156115a857600080fd5b505af11580156115bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115e091908101906117f0565b90507f7a71d240e56d9d3ca59bded7e91db464ed5dac93a17d8e239a01a3046792dbe2816040516116119190611c38565b60405180910390a180935050505095945050505050565b6000611634825161203e565b905092915050565b60006116488251612050565b905092915050565b600061165c8251612062565b905092915050565b60006116708251612074565b905092915050565b60006116848235612086565b905092915050565b60006116988251612086565b905092915050565b600082601f83011215156116b357600080fd5b81356116c66116c182611fad565b611f80565b915080825260208301602083018583830111156116e257600080fd5b6116ed8382846120b4565b50505092915050565b600082601f830112151561170957600080fd5b815161171c61171782611fad565b611f80565b9150808252602083016020830185838301111561173857600080fd5b6117438382846120c3565b50505092915050565b60006020828403121561175e57600080fd5b600061176c84828501611628565b91505092915050565b60006020828403121561178757600080fd5b60006117958482850161163c565b91505092915050565b6000602082840312156117b057600080fd5b60006117be84828501611650565b91505092915050565b6000602082840312156117d957600080fd5b60006117e784828501611664565b91505092915050565b60006020828403121561180257600080fd5b60006118108482850161168c565b91505092915050565b60006020828403121561182b57600080fd5b600082015167ffffffffffffffff81111561184557600080fd5b611851848285016116f6565b91505092915050565b60008060006060848603121561186f57600080fd5b600084013567ffffffffffffffff81111561188957600080fd5b611895868287016116a0565b93505060206118a686828701611678565b92505060406118b786828701611678565b9150509250925092565b600080600080600060a086880312156118d957600080fd5b600086013567ffffffffffffffff8111156118f357600080fd5b6118ff888289016116a0565b955050602086013567ffffffffffffffff81111561191c57600080fd5b611928888289016116a0565b945050604086013567ffffffffffffffff81111561194557600080fd5b611951888289016116a0565b935050606086013567ffffffffffffffff81111561196e57600080fd5b61197a888289016116a0565b925050608086013567ffffffffffffffff81111561199757600080fd5b6119a3888289016116a0565b9150509295509295909350565b60006119bb82611fe6565b808452602084019350836020820285016119d485611fd9565b60005b84811015611a0d5783830388526119ef838351611a81565b92506119fa82612007565b91506020880197506001810190506119d7565b508196508694505050505092915050565b611a2781612090565b82525050565b611a36816120a2565b82525050565b611a4581612034565b82525050565b6000611a5682611ffc565b808452611a6a8160208601602086016120c3565b611a73816120f6565b602085010191505092915050565b6000611a8c82611ff1565b808452611aa08160208601602086016120c3565b611aa9816120f6565b602085010191505092915050565b6000601382527f43616c6c6572206973206e6f74206f776e6572000000000000000000000000006020830152604082019050919050565b6000600482527f68617368000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600482527f75756964000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600782527f6f776e65726964000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600782527f74625f6e616d65000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600382527f75726c00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600582527f7469746c650000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000602082019050611c4d6000830184611a3c565b92915050565b600060c082019050611c686000830189611a3c565b8181036020830152611c7a81886119b0565b90508181036040830152611c8e81876119b0565b90508181036060830152611ca281866119b0565b90508181036080830152611cb681856119b0565b905081","810360a0830152611cca81846119b0565b9050979650505050505050565b6000604082019050611cec6000830185611a3c565b611cf96020830184611a3c565b9392505050565b60006020820190508181036000830152611d1a8184611a81565b905092915050565b60006040820190508181036000830152611d3c8185611a81565b9050611d4b6020830184611a1e565b9392505050565b60006040820190508181036000830152611d6c8185611a81565b9050611d7b6020830184611a2d565b9392505050565b60006020820190508181036000830152611d9b81611ab7565b9050919050565b60006020820190508181036000830152611dbb81611aee565b9050919050565b60006040820190508181036000830152611ddb81611aee565b90508181036020830152611def8184611a4b565b905092915050565b60006020820190508181036000830152611e1081611b25565b9050919050565b60006040820190508181036000830152611e3081611b25565b90508181036020830152611e448184611a4b565b905092915050565b60006020820190508181036000830152611e6581611b5c565b9050919050565b60006040820190508181036000830152611e8581611b5c565b90508181036020830152611e998184611a4b565b905092915050565b60006040820190508181036000830152611eba81611b93565b90508181036020830152611ece8184611a81565b905092915050565b60006020820190508181036000830152611eef81611bca565b9050919050565b60006040820190508181036000830152611f0f81611bca565b90508181036020830152611f238184611a4b565b905092915050565b60006020820190508181036000830152611f4481611c01565b9050919050565b60006040820190508181036000830152611f6481611c01565b90508181036020830152611f788184611a4b565b905092915050565b6000604051905081810181811067ffffffffffffffff82111715611fa357600080fd5b8060405250919050565b600067ffffffffffffffff821115611fc457600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061204982612014565b9050919050565b600061205b82612014565b9050919050565b600061206d82612014565b9050919050565b600061207f82612014565b9050919050565b6000819050919050565b600061209b82612014565b9050919050565b60006120ad82612014565b9050919050565b82818337600083830152505050565b60005b838110156120e15780820151818401526020810190506120c6565b838111156120f0576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a72305820252df427a36f0b37a0efcb2d94bb1f75753cbc6f0aeb64140ee2159f729b32396c6578706572696d656e74616cf50037"};

    public static final String BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"60806040523480156200001157600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611001600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c92a78016040805190810160405280600f81526020017f745f696e6672696e67656d656e743100000000000000000000000000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016200014391906200028c565b602060405180830381600087803b1580156200015e57600080fd5b505af115801562000173573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001999190810190620001b6565b5062000336565b6000620001ae8251620002e5565b905092915050565b600060208284031215620001c957600080fd5b6000620001d984828501620001a0565b91505092915050565b6000620001ef82620002da565b80845262000205816020860160208601620002ef565b620002108162000325565b602085010191505092915050565b6000600782527f74625f6e616d65000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601b82527f757569642c7469746c652c686173682c6f776e657269642c75726c00000000006020830152604082019050919050565b60006060820190508181036000830152620002a88184620001e2565b90508181036020830152620002bd816200021e565b90508181036040830152620002d28162000255565b905092915050565b600081519050919050565b6000819050919050565b60005b838110156200030f578082015181840152602081019050620002f2565b838111156200031f576000848401525b50505050565b6000601f19601f8301169050919050565b61214180620003466000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638b2ac80714610051578063ecd33d4f1461008e575b600080fd5b34801561005d57600080fd5b50610078600480360361007391908101906118c1565b6100d0565b6040516100859190611c38565b60405180910390f35b34801561009a57600080fd5b506100b560048036036100b0919081019061185a565b61078a565b6040516100c796959493929190611c53565b60405180910390f35b6000806000803373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610167576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161015e90611f0b565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280600f81526020017f745f696e6672696e67656d656e743100000000000000000000000000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016102139190611d00565b602060405180830381600087803b15801561022d57600080fd5b505af1158015610241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061026591908101906117c7565b92508273ffffffffffffffffffffffffffffffffffffffff16635887ab246040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156102cb57600080fd5b505af11580156102df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610303919081019061179e565b91508173ffffffffffffffffffffffffffffffffffffffff16631a391cb46040805190810160405280600f81526020017f745f696e6672696e67656d656e743100000000000000000000000000000000008152506040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161038f9190611e81565b600060405180830381600087803b1580156103a957600080fd5b505af11580156103bd573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb48a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016104169190611e4c565b600060405180830381600087803b15801561043057600080fd5b505af1158015610444573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4896040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161049d9190611ed6565b600060405180830381600087803b1580156104b757600080fd5b505af11580156104cb573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016105249190611da2565b600060405180830381600087803b15801561053e57600080fd5b505af1158015610552573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4876040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016105ab9190611df7565b600060405180830381600087803b1580156105c557600080fd5b505af11580156105d9573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16631a391cb4866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016106329190611f4b565b600060405180830381600087803b15801561064c57600080fd5b505af1158015610660573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff16634c6f30c06040805190810160405280600f81526020017f745f696e6672696e67656d656e74310000000000000000000000000000000000815250846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016106f0929190611d52565b602060405180830381600087803b15801561070a57600080fd5b505af115801561071e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061074291908101906117f0565b90507fd6dd18d160f13e932004fcc25fe0dbf25532d387374f9e39408a9fbacf4a47de816040516107739190611c38565b60405180910390a180935050505095945050505050565b600060608060608060606000806000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b656040805190810160405280600f81526020017f745f696e6672696e67656d656e743100000000000000000000000000000000008152506040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016108489190611d00565b602060405180830381600087803b15801561086257600080fd5b505af1158015610876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061089a91908101906117c7565b94508473ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561090057600080fd5b505af1158015610914573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610938919081019061174c565b935060008e5111156109cc578373ffffffffffffffffffffffffffffffffffffffff1663ae763db58f6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016109999190611df7565b600060405180830381600087803b1580156109b357600080fd5b505af11580156109c7573d6000803e3d6000fd5b505050505b8473ffffffffffffffffffffffffffffffffffffffff1663d8ac59576040805190810160405280600f81526020017f745f696e6672696e67656d656e74310000000000000000000000000000000000815250866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610a58929190611d22565b602060405180830381600087803b158015610a7257600080fd5b505af1158015610a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610aaa9190810190611775565b92508273ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610b1057600080fd5b505af1158015610b24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b4891908101906117f0565b9a508373ffffffffffffffffffffffffffffffffffffffff16633249273760018f038e6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610ba4929190611cd7565b600060405180830381600087803b158015610bbe57600080fd5b505af1158015610bd2573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff1663d8ac59576040805190810160405280600f81526020017f745f696e6672696e67656d656e74310000000000000000000000000000000000815250866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610c62929190611d22565b602060405180830381600087803b158015610c7c57600080fd5b505af1158015610c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cb49190810190611775565b92508273ff","ffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d5291908101906117f0565b604051908082528060200260200182016040528015610d8557816020015b6060815260200190600190039081610d705790505b5099508273ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610dec57600080fd5b505af1158015610e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e2491908101906117f0565b604051908082528060200260200182016040528015610e5757816020015b6060815260200190600190039081610e425790505b5098508273ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610ebe57600080fd5b505af1158015610ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ef691908101906117f0565b604051908082528060200260200182016040528015610f2957816020015b6060815260200190600190039081610f145790505b5097508273ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610f9057600080fd5b505af1158015610fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fc891908101906117f0565b604051908082528060200260200182016040528015610ffb57816020015b6060815260200190600190039081610fe65790505b5096508273ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561106257600080fd5b505af1158015611076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061109a91908101906117f0565b6040519080825280602002602001820160405280156110cd57816020015b60608152602001906001900390816110b85790505b509550600091505b8273ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061117191908101906117f0565b821215611605578273ffffffffffffffffffffffffffffffffffffffff16633dd2b614836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016111cd9190611c38565b602060405180830381600087803b1580156111e757600080fd5b505af11580156111fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061121f919081019061179e565b90508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161127490611e2c565b600060405180830381600087803b15801561128e57600080fd5b505af11580156112a2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506112cb9190810190611819565b8a838151811015156112d957fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161133990611eb6565b600060405180830381600087803b15801561135357600080fd5b505af1158015611367573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506113909190810190611819565b898381518110151561139e57fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016113fe90611d82565b600060405180830381600087803b15801561141857600080fd5b505af115801561142c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506114559190810190611819565b888381518110151561146357fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016114c390611dd7565b600060405180830381600087803b1580156114dd57600080fd5b505af11580156114f1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061151a9190810190611819565b878381518110151561152857fe5b906020019060200201819052508073ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161158890611f2b565b600060405180830381600087803b1580156115a257600080fd5b505af11580156115b6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506115df9190810190611819565b86838151811015156115ed57fe5b906020019060200201819052508160010191506110d5565b8a8a8a8a8a8a9a509a509a509a509a509a50505050505093975093979195509350565b6000611634825161203e565b905092915050565b60006116488251612050565b905092915050565b600061165c8251612062565b905092915050565b60006116708251612074565b905092915050565b60006116848235612086565b905092915050565b60006116988251612086565b905092915050565b600082601f83011215156116b357600080fd5b81356116c66116c182611fad565b611f80565b915080825260208301602083018583830111156116e257600080fd5b6116ed8382846120b4565b50505092915050565b600082601f830112151561170957600080fd5b815161171c61171782611fad565b611f80565b9150808252602083016020830185838301111561173857600080fd5b6117438382846120c3565b50505092915050565b60006020828403121561175e57600080fd5b600061176c84828501611628565b91505092915050565b60006020828403121561178757600080fd5b60006117958482850161163c565b91505092915050565b6000602082840312156117b057600080fd5b60006117be84828501611650565b91505092915050565b6000602082840312156117d957600080fd5b60006117e784828501611664565b91505092915050565b60006020828403121561180257600080fd5b60006118108482850161168c565b91505092915050565b60006020828403121561182b57600080fd5b600082015167ffffffffffffffff81111561184557600080fd5b611851848285016116f6565b91505092915050565b60008060006060848603121561186f57600080fd5b600084013567ffffffffffffffff81111561188957600080fd5b611895868287016116a0565b93505060206118a686828701611678565b92505060406118b786828701611678565b9150509250925092565b600080600080600060a086880312156118d957600080fd5b600086013567ffffffffffffffff8111156118f357600080fd5b6118ff888289016116a0565b955050602086013567ffffffffffffffff81111561191c57600080fd5b611928888289016116a0565b945050604086013567ffffffffffffffff81111561194557600080fd5b611951888289016116a0565b935050606086013567ffffffffffffffff81111561196e57600080fd5b61197a888289016116a0565b925050608086013567ffffffffffffffff81111561199757600080fd5b6119a3888289016116a0565b9150509295509295909350565b60006119bb82611fe6565b808452602084019350836020820285016119d485611fd9565b60005b84811015611a0d5783830388526119ef838351611a81565b92506119fa82612007565b91506020880197506001810190506119d7565b508196508694505050505092915050565b611a2781612090565b82525050565b611a36816120a2565b82525050565b611a4581612034565b82525050565b6000611a5682611ffc565b808452611a6a8160208601602086016120c3565b611a73816120f6565b602085010191505092915050565b6000611a8c82611ff1565b808452611aa08160208601602086016120c3565b611aa9816120f6565b602085010191505092915050565b6000600482527f68617368000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600782527f6f776e65726964000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600482527f75756964000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600782527f74625f6e616d65000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600582527f7469746c650000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601382527f43616c6c6572206973206e6f74206f776e6572000000000000000000000000006020830152604082019050919050565b6000600382527f75726c00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000602082019050611c4d6000830184611a3c565b92915050565b600060c082019050611c686000830189611a3c565b8181036020830152611c7a81886119b0565b90508181036040830152611c8e81876119b0565b90508181036060830152611ca281866119b0565b90508181036080830152611cb681856119b0565b905081","810360a0830152611cca81846119b0565b9050979650505050505050565b6000604082019050611cec6000830185611a3c565b611cf96020830184611a3c565b9392505050565b60006020820190508181036000830152611d1a8184611a81565b905092915050565b60006040820190508181036000830152611d3c8185611a81565b9050611d4b6020830184611a1e565b9392505050565b60006040820190508181036000830152611d6c8185611a81565b9050611d7b6020830184611a2d565b9392505050565b60006020820190508181036000830152611d9b81611ab7565b9050919050565b60006040820190508181036000830152611dbb81611ab7565b90508181036020830152611dcf8184611a4b565b905092915050565b60006020820190508181036000830152611df081611aee565b9050919050565b60006040820190508181036000830152611e1081611aee565b90508181036020830152611e248184611a4b565b905092915050565b60006020820190508181036000830152611e4581611b25565b9050919050565b60006040820190508181036000830152611e6581611b25565b90508181036020830152611e798184611a4b565b905092915050565b60006040820190508181036000830152611e9a81611b5c565b90508181036020830152611eae8184611a81565b905092915050565b60006020820190508181036000830152611ecf81611b93565b9050919050565b60006040820190508181036000830152611eef81611b93565b90508181036020830152611f038184611a4b565b905092915050565b60006020820190508181036000830152611f2481611bca565b9050919050565b60006020820190508181036000830152611f4481611c01565b9050919050565b60006040820190508181036000830152611f6481611c01565b90508181036020830152611f788184611a4b565b905092915050565b6000604051905081810181811067ffffffffffffffff82111715611fa357600080fd5b8060405250919050565b600067ffffffffffffffff821115611fc457600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061204982612014565b9050919050565b600061205b82612014565b9050919050565b600061206d82612014565b9050919050565b600061207f82612014565b9050919050565b6000819050919050565b600061209b82612014565b9050919050565b60006120ad82612014565b9050919050565b82818337600083830152505050565b60005b838110156120e15780820151818401526020810190506120c6565b838111156120f0576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a7230582008ebb506e7143f2f9dc0d9babf1e9c700f0f641e01b0727464eaa578142ad2fe6c6578706572696d656e74616cf50037"};

    public static final String SM_BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"constant\":true,\"inputs\":[{\"name\":\"ownerid\",\"type\":\"string\"},{\"name\":\"index\",\"type\":\"int256\"},{\"name\":\"size\",\"type\":\"int256\"}],\"name\":\"selectInfringement\",\"outputs\":[{\"name\":\"totalCount\",\"type\":\"int256\"},{\"name\":\"uuids\",\"type\":\"string[]\"},{\"name\":\"titles\",\"type\":\"string[]\"},{\"name\":\"hashs\",\"type\":\"string[]\"},{\"name\":\"ownerids\",\"type\":\"string[]\"},{\"name\":\"urls\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"uuid\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"string\"},{\"name\":\"ownerid\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"name\":\"insertInfringement\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"count\",\"type\":\"int256\"}],\"name\":\"InsertInfringementResult\",\"type\":\"event\"}]"};

    public static final String ABI = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_SELECTINFRINGEMENT = "selectInfringement";

    public static final String FUNC_INSERTINFRINGEMENT = "insertInfringement";

    public static final Event INSERTINFRINGEMENTRESULT_EVENT = new Event("InsertInfringementResult", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
    ;

    protected Infringement(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public Tuple6<BigInteger, List<String>, List<String>, List<String>, List<String>, List<String>> selectInfringement(String ownerid, BigInteger index, BigInteger size) throws ContractException {
        final Function function = new Function(FUNC_SELECTINFRINGEMENT, 
                Arrays.<Type>asList(new Utf8String(ownerid),
                new Int256(index),
                new Int256(size)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple6<BigInteger, List<String>, List<String>, List<String>, List<String>, List<String>>(
                (BigInteger) results.get(0).getValue(), 
                convertToNative((List<Utf8String>) results.get(1).getValue()), 
                convertToNative((List<Utf8String>) results.get(2).getValue()), 
                convertToNative((List<Utf8String>) results.get(3).getValue()), 
                convertToNative((List<Utf8String>) results.get(4).getValue()), 
                convertToNative((List<Utf8String>) results.get(5).getValue()));
    }

    public TransactionReceipt insertInfringement(String uuid, String title, String hash, String ownerid, String url) {
        final Function function = new Function(
                FUNC_INSERTINFRINGEMENT, 
                Arrays.<Type>asList(new Utf8String(uuid),
                new Utf8String(title),
                new Utf8String(hash),
                new Utf8String(ownerid),
                new Utf8String(url)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] insertInfringement(String uuid, String title, String hash, String ownerid, String url, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_INSERTINFRINGEMENT, 
                Arrays.<Type>asList(new Utf8String(uuid),
                new Utf8String(title),
                new Utf8String(hash),
                new Utf8String(ownerid),
                new Utf8String(url)),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForInsertInfringement(String uuid, String title, String hash, String ownerid, String url) {
        final Function function = new Function(
                FUNC_INSERTINFRINGEMENT, 
                Arrays.<Type>asList(new Utf8String(uuid),
                new Utf8String(title),
                new Utf8String(hash),
                new Utf8String(ownerid),
                new Utf8String(url)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple5<String, String, String, String, String> getInsertInfringementInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_INSERTINFRINGEMENT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple5<String, String, String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (String) results.get(4).getValue()
                );
    }

    public Tuple1<BigInteger> getInsertInfringementOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_INSERTINFRINGEMENT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public List<InsertInfringementResultEventResponse> getInsertInfringementResultEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(INSERTINFRINGEMENTRESULT_EVENT, transactionReceipt);
        ArrayList<InsertInfringementResultEventResponse> responses = new ArrayList<InsertInfringementResultEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            InsertInfringementResultEventResponse typedResponse = new InsertInfringementResultEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.count = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeInsertInfringementResultEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(INSERTINFRINGEMENTRESULT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeInsertInfringementResultEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(INSERTINFRINGEMENTRESULT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public static Infringement load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new Infringement(contractAddress, client, credential);
    }

    public static Infringement deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(Infringement.class, client, credential, getBinary(client.getCryptoSuite()), "");
    }

    public static class InsertInfringementResultEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger count;
    }
}
